#!/usr/bin/env python
# -*- coding: utf-8 -*-
from datetime import datetime
import os

def log_by_path(message, file_path=None):
    """
    记录日志消息并写入文件（如果提供文件路径）
    格式为：[年-月-日 时:分:秒.毫秒] 消息内容
    例如：[2025-06-19 17:28:11.816] COM4
    :param message: 日志消息内容
    :param file_path: 日志文件路径（可选）
    """
    # 获取当前时间（含6位微秒）
    now = datetime.now()
    # 格式化为字符串并截取前23个字符（保留3位毫秒）
    timestamp = now.strftime("%Y-%m-%d %H:%M:%S.%f")[:23]
    # 构建日志条目
    log_entry = f"[{timestamp}] {message}"

    # 输出到控制台
    print(log_entry)

    # 如果提供了文件路径，写入文件
    if file_path:
        try:
            # 以追加模式打开文件（如果文件不存在则创建）
            with open(file_path, 'a', encoding='utf-8') as f:
                f.write(log_entry + "\n")
        except Exception as e:
            print(f"写入日志文件失败: {str(e)}")
            print(f"原始日志内容: {log_entry}")


def log_by_obj(message, file_obj=None):
    """
    记录日志消息并写入文件（如果提供文件路径）
    格式为：[年-月-日 时:分:秒.毫秒] 消息内容
    例如：[2025-06-19 17:28:11.816] COM4
    :param message: 日志消息内容
    :param file_path: 日志文件路径（可选）
    """
    # 获取当前时间（含6位微秒）
    now = datetime.now()
    # 格式化为字符串并截取前23个字符（保留3位毫秒）
    timestamp = now.strftime("%Y-%m-%d %H:%M:%S.%f")[:23]
    # 构建日志条目
    log_entry = f"[{timestamp}] {message}"
    # 输出到控制台
    print(log_entry)
    # 如果提供了文件路径，写入文件
    if file_obj and not file_obj.closed:
        try:
            file_obj.write(log_entry + "\n")
            file_obj.flush()
        except Exception as e:
            print(f"写入日志文件失败: {str(e)}")
            print(f"原始日志内容: {log_entry}")


def log_file_load():
    """
    在程序执行根目录下创建并打开日期格式的日志文件
    文件名格式：年月日 + "log.txt"（例如：20250623log.txt）
    返回文件对象和文件路径
    """
    # 获取当前日期并格式化为年月日字符串（无分隔符）
    date_str = datetime.now().strftime("%Y%m%d")
    # 构建文件名
    filename = f"{date_str}log.txt"
    # 获取程序执行根目录（当前工作目录）
    root_dir = os.getcwd()
    # 构建完整文件路径
    file_path = os.path.join(root_dir, filename)
    # 创建并打开文件（追加模式）
    file_obj = open(file_path, 'a+', encoding='utf-8')
    # 如果是新文件，添加初始内容
    if file_obj.tell() == 0:  # 文件指针在0表示新文件
        file_obj.write(f"日志文件创建时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')}\n")
        file_obj.flush()  # 确保立即写入
    print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}]已加载日志文件: {file_path}")
    return file_obj, file_path


def log_file_close(file_obj):
    """
    关闭日志文件
    :param file_obj: 要关闭的文件对象
    """
    if file_obj and not file_obj.closed:
        file_obj.close()
        print(f"已关闭日志文件")
    else:
        print("文件已关闭或无效")
